package IHM;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.io.File;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

/**
 * Classe permettant l'affichage d'insertion des liens
 * @author Aubry Thomas
 * @author Bouchet Sylvain
 * @author Fauvel Alexis
 * @author Lessieur Jocelyn
 * @author Mathias Bastien 
 * @author Teuf Antoine
 * @version 1.0
 */
public class FenetreInsertLien extends JFrame implements ActionListener, DocumentListener, FocusListener{
	
	/**
	 * IHM de l'application
	 */
	private IHM ihm;

	/**
	 * Bouton radio pour les liens de type lien internet
	 */
	private JCheckBox typeLien;
	
	/**
	 * Bouton radio pour les liens de type fichier
	 */
	private JCheckBox typeFichier;
	
	/** 
	 * Groupe des boutons radios
	 */
	private ButtonGroup cbg;
	
	/**
	 * JTextField pour l'adresse du lien
	 */
	private JTextField adresse;
	
	/**
	 * JTextFiel pour l'intitule du lien
	 */
	private JTextField intitule;
	
	/**
	 * Bouton pour valider
	 */
	private JButton valid;
	
	/**
	 * Fichier contenant le fichier à mettre en lien
	 */
	private File fichier;

	/**
	 * Constructeur de la classe FenetreInsertLien
	 * @param ihm	la classe IMH
	 */
	public FenetreInsertLien(IHM ihm) {
		this.ihm = ihm;
		
		setTitle("Insertion de lien");
		setLocationRelativeTo(null);
		setLayout(new GridLayout(6, 1));
		
		add(new JLabel("Insérer un lien vers :"));
		
		/* Choix du type de lien */
		JPanel panCheckBox = new JPanel();
		add(panCheckBox);
		cbg = new ButtonGroup();
		
		typeFichier = new JCheckBox("un fichier");
		typeFichier.addActionListener(this);
		panCheckBox.add(typeFichier);
		cbg.add(typeFichier);
		
		typeLien = new JCheckBox("une adresse Internet");
		typeLien.addActionListener(this);
		panCheckBox.add(typeLien);
		cbg.add(typeLien);
		/* ------------------------------ */
		
		/* Affichage de la cible du lien:*/
		adresse = new JTextField();
		adresse.setEditable(false);
		adresse.getDocument().addDocumentListener(this);
		adresse.addFocusListener(this);
		add(adresse);
		
		/* Choix de l'intitulé du lien */
		add(new JLabel("Intitulé du lien affiché sur la page :"));
		
		intitule = new JTextField();
		intitule.getDocument().addDocumentListener(this);
		add(intitule);
		/* ------------------------------ */
		
		valid = new JButton("Ajouter le lien");
		valid.addActionListener(this);
		valid.setEnabled(false);
		add(valid);
		
		pack();
		setVisible(true);
	}
	
	/**
	 * Permet de valider ou non le lien
	 */
	public void verifValid() {
		if(!adresse.getText().equals("Saisissez l'adresse ici...") && adresse.getText().length() > 0 && intitule.getText().length() > 0)
			valid.setEnabled(true);
		else
			valid.setEnabled(false);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		verifValid();
		
		if(typeLien.isSelected()) {
			if(adresse.getText().length() < 8 || !adresse.getText().substring(0,7).equals("http://") && !adresse.getText().substring(0,8).equals("https://")) {
				adresse.setText("http://"+adresse.getText());
			}
		}
		
		if(e.getSource()==typeLien) {
			adresse.setText("Saisissez l'adresse ici...");
			adresse.setEditable(true);
		} else if (e.getSource()==typeFichier){
			adresse.setText("");
			adresse.setEditable(false);
			JFileChooser fc = new JFileChooser();
			int returnVal = fc.showDialog(this, "Choisir");
			
			if(returnVal== JFileChooser.APPROVE_OPTION) {
				adresse.setText(fc.getSelectedFile().toString());
				fichier = fc.getSelectedFile();
			} else {
				fichier = null;
				cbg.clearSelection();
			}
		} else if (e.getSource()==valid) {
			if(typeLien.isSelected())
				ihm.getControleur().getProjetEnCours().getPageEnCours().insererLien(intitule.getText(), adresse.getText());
			else if(typeFichier.isSelected())
				ihm.getControleur().getProjetEnCours().getPageEnCours().insererLien(intitule.getText(), fichier);
			ihm.majVisu();
			dispose();
		}
		
		
	}

	@Override
	public void changedUpdate(DocumentEvent arg0) {
		verifValid();
	}

	@Override
	public void insertUpdate(DocumentEvent arg0) {
		verifValid();
	}

	@Override
	public void removeUpdate(DocumentEvent arg0) {
		verifValid();
	}

	@Override
	public void focusGained(FocusEvent arg0) {
		if(adresse.getText().equals("Saisissez l'adresse ici..."))
			adresse.setText("");
	}

	@Override
	public void focusLost(FocusEvent arg0) {
		if(adresse.getText().equals(""))
			adresse.setText("Saisissez l'adresse ici...");
	}
}
